/**
 * 首页卡片依赖数据
 */
export type Feed = {
  /** 唯一 id */
  feed_id: string
  /** 用户名 */
  user_name: string
  /** 数字 tag */
  tags: string[]
  /** 自定义 prompt */
  custom_prompt: string
  /** 用户头像 */
  user_icon: string
  /** 封面图 */
  cover_image_url: string
  /** 高清封面图 */
  cover_full_image_url: string
  /** 宽 */
  width: number
  /** 高 */
  height: number
  /** 分数 */
  score: number
  /** 点赞数 */
  likes: number
  /** 是否点赞 */
  is_liked: boolean
  /** 全称 not save for work，是否敏感内容 */
  is_nsfw: boolean
  /** 英文 tag */
  feed_tags: string[]
  /** 使用次数 */
  use_count: number
  /** 反向关键词 */
  negative_prompt?: string
}
export interface BaseList {
  page_size: number
  page_num: number
  total: number
}
export interface FeedList extends BaseList {
  data: Feed[]
}

/**
 * 模型
 * @description 一个 Feed 由一个或多个模型组成
 */
export type Model = {
  auto_face_fix?: number

  base_model_id?: string
  /** 模型分类编码 */
  category_code?: string

  cfg_fix?: number

  cfg_fix_cfg_scale?: number

  cfg_scale?: number

  checkpoint?: string

  civitai_link?: string

  civitai_user_pic?: string

  civitai_username?: string

  clip_skip?: number

  description?: string

  embedding?: string

  embedding_file_name?: string

  file_name?: string

  heat_score?: number
  /** 模型图标 */
  icon_urls?: string[]

  icons_blur_hash?: string[]

  id?: string

  is_collected?: boolean

  is_deleted?: boolean

  is_enable?: boolean

  is_realistic?: boolean

  lora?: string

  mimic_cfg_scale?: number
  /**
   * 模型编码
   * @description 等价于 Feed 中的 tags 列表元素
   */
  model_code?: string
  /**
   * 模型名称
   */
  model_name?: string

  negative_prompt?: string

  permissions?: { [key: string]: number }

  post_description?: string

  prompt?: string

  sampler_name?: string

  sd_vae?: string
  source?: ModelSource
  status?: ModelStatus

  step?: number

  style_weight?: number

  tags?: string[]

  trigger_words?: string[]

  user_icon?: string

  user_id?: string

  user_name?: string

  weight?: number
}

export type ModelSource = 'Forward' | 'Original'

export type ModelStatus = 'PUBLISHED' | 'WAITING_FOR_DELETE' | 'WAITING_FOR_PUBLISH'

/**
 * 模型分类
 * @description Feed 详情页通过模型编码获取模型分类数据，显示对应的颜色和分类名称
 */
export type ModelCategory = {
  /**
   * Category Code
   */
  category_code?: string
  /**
   * Category Color
   */
  category_color?: string
  /**
   * Category Icon Url
   */
  category_icon_url?: string
  /**
   * Category Name
   */
  category_name?: string
  /**
   * Category Sort
   */
  category_sort?: number
  /**
   * Id
   */
  id?: string
  /**
   * Is Enabled
   */
  is_enabled?: boolean
  /**
   * 是否必须
   */
  is_mandatory?: boolean
  /**
   * Is Single Option
   */
  is_single_option?: boolean
}
/** 模型列表 */
export interface ModelList extends BaseList {
  data: Model[]
}
/** 任务类型 */
type TaskType = 'Txt2img' | 'Img2txt'
/** 创作模式 */
export type AuthoringMode = 'GENERAL' | 'PROFESSIONAL'
/** 发起渲染的参数 */
export type DrawParams = {
  /** 正向咒语 */
  prompt?: string
  /** 反向咒语 */
  negative_prompt?: string
  /** 模型编码 */
  tags?: string
  /** 比例对应宽度, 从根目录 constant.ts 获取 */
  cropped_width?: number
  /** 比例对应高度, 从根目录 constant.ts 获取 */
  cropped_height?: number
  /** 包名 */
  package_name?: string
  /** 版本号 */
  version?: string
  /**
   * 额外参数, 需要使用 JSON 字符串
   * @description 权重 - {model_weight: {k:string,v:number}}
   */
  spell_ext_args?: string
  /** 任务序号 */
  task_index?:number
  /** 任务类型 */
  task_type?:TaskType
  /** 模式 */
  mode?: AuthoringMode
  /** 是否为慢速通道 */
  slow_pass?: boolean
}
export type DrawProgress = {
  process:number
  in_line:number
  time_left_in_seconds:number
}
/**
 * 渲染状态
 * @description SUCCEED 成功
 * @description FAILED 失败
 * @description NSFW 敏感内容
 * @description WAITING 等待中
 * @description RENDERING 重新渲染中
 */
export type DrawStatus = 'SUCCEED' | 'FAILED' | 'NSFW' | 'WAITING' | 'RENDERING' | string

/** 渲染结果 */
export type DrawResult = {
  /** 渲染请求 ID */
  draw_request_id:string
  /** 渲染进度 */
  progress:DrawProgress
  /** 渲染状态 */
  draw_status: DrawStatus
  /** 生成图 */
  generated_image_addresses: string[]
  /** 敏感图索引 */
  image_nsfw_flag: number[]
  /** 是否 VIP */
  is_vip:boolean
  /** 当前金币 */
  current_coins: number
  /** 项目 ID */
  project_id?:string
  /** 显示图片数量，其它图片加锁 */
  draw_num?:number
}
